#ifndef LTGSQL_STORAGE_H
#define LTGSQL_STORAGE_H

#include "types.h"

// 存储引擎句柄
typedef struct ltgsql_storage_engine ltgsql_storage_engine_t;

// 存储引擎配置
typedef struct {
    const char* data_dir;
    size_t page_size;
    size_t buffer_pool_size;
    ltgsql_bool use_wal;
    ltgsql_bool use_compression;
} ltgsql_storage_config;

// 存储引擎接口
ltgsql_storage_engine_t* ltgsql_storage_create(const ltgsql_storage_config* config);
void ltgsql_storage_destroy(ltgsql_storage_engine_t* engine);

ltgsql_status ltgsql_storage_create_table(ltgsql_storage_engine_t* engine,
                                         const ltgsql_table_metadata* meta);
ltgsql_status ltgsql_storage_drop_table(ltgsql_storage_engine_t* engine,
                                      const char* table_name);

ltgsql_status ltgsql_storage_insert(ltgsql_storage_engine_t* engine,
                                  const char* table_name,
                                  const ltgsql_value* values,
                                  size_t count);
ltgsql_status ltgsql_storage_select(ltgsql_storage_engine_t* engine,
                                  const char* table_name,
                                  ltgsql_result_set** result);

// 事务支持
typedef struct ltgsql_transaction ltgsql_transaction_t;
ltgsql_transaction_t* ltgsql_transaction_begin(ltgsql_storage_engine_t* engine);
ltgsql_status ltgsql_transaction_commit(ltgsql_transaction_t* txn);
ltgsql_status ltgsql_transaction_rollback(ltgsql_transaction_t* txn);

// 备份和恢复
ltgsql_status ltgsql_storage_backup(ltgsql_storage_engine_t* engine,
                                  const char* backup_path);
ltgsql_status ltgsql_storage_restore(ltgsql_storage_engine_t* engine,
                                   const char* backup_path);

#endif // LTGSQL_STORAGE_H